home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 51 / Amiga Format CD51 (2000-03-10)(Future Publishing)(GB)[!][issue 2000-04].iso / -in_the_mag- / workbench / term_4.8 / extras / source / term-source.lha / SpeechPanel.c < prev    next >
C/C++ Source or Header  |  1997-03-11  |  9KB  |  395 lines

  1. /*
  2. **    SpeechPanel.c
  3. **
  4. **    Editing panel for speech configuration
  5. **
  6. **    Copyright © 1990-1997 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_RATE=1,GAD_PITCH,GAD_FREQUENCY,GAD_VOLUME,GAD_SEX,GAD_ENABLED,GAD_SPEAK,
  17.             GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL,GAD_DISCARD
  18.         };
  19.  
  20. STATIC LONG SAVE_DS STACKARGS
  21. VolumeDisplay(struct Gadget *UnusedGadget,LONG Level)
  22. {
  23.     return((100 * (LONG)Level) / MAXVOL);
  24. }
  25.  
  26. BOOL
  27. SpeechPanelConfig(struct SpeechConfig *SpeechConfig,STRPTR LastSpeech,BOOL *ChangePtr)
  28. {
  29.     struct SpeechConfig PrivateConfig;
  30.     LayoutHandle *Handle;
  31.     STRPTR LevelFormat;
  32.     BOOL Changed;
  33.  
  34.     Changed = FALSE;
  35.  
  36.     LevelFormat = LocaleBase ? "%lD" : "%ld";
  37.  
  38.     CopyMem(SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  39.  
  40.     if(Handle = LT_CreateHandleTags(Window->WScreen,
  41.         LAHN_LocaleHook,    &LocaleHook,
  42.         LAHN_ExitFlush,    FALSE,
  43.     TAG_DONE))
  44.     {
  45.         struct Window *PanelWindow;
  46.  
  47.         LT_New(Handle,
  48.             LA_Type,    VERTICAL_KIND,
  49.         TAG_DONE);
  50.         {
  51.             LT_New(Handle,
  52.                 LA_Type,    VERTICAL_KIND,
  53.             TAG_DONE);
  54.             {
  55.                 LT_New(Handle,
  56.                     LA_Type,            SliderType,
  57.                     LA_LabelID,            MSG_SPEECHPANEL_RATE_GAD,
  58.                     LA_WORD,            &PrivateConfig.Rate,
  59.                     LA_Chars,            20,
  60.                     LA_ID,                GAD_RATE,
  61.                     GTSL_Min,            MINRATE,
  62.                     GTSL_Max,            MAXRATE,
  63.                     GTSL_LevelFormat,    LevelFormat,
  64.                 TAG_DONE);
  65.  
  66.                 LT_New(Handle,
  67.                     LA_Type,            SliderType,
  68.                     LA_LabelID,            MSG_SPEECHPANEL_PITCH_GAD,
  69.                     LA_WORD,            &PrivateConfig.Pitch,
  70.                     LA_ID,                GAD_PITCH,
  71.                     GTSL_Min,            MINPITCH,
  72.                     GTSL_Max,            MAXPITCH,
  73.                     GTSL_LevelFormat,    LevelFormat,
  74.                 TAG_DONE);
  75.  
  76.                 LT_New(Handle,
  77.                     LA_Type,            SliderType,
  78.                     LA_LabelID,            MSG_SPEECHPANEL_FREQUENCY_GAD,
  79.                     LA_LONG,            &PrivateConfig.Frequency,
  80.                     LA_ID,                GAD_FREQUENCY,
  81.                     GTSL_Min,            MINFREQ,
  82.                     GTSL_Max,            MAXFREQ,
  83.                     GTSL_LevelFormat,    LevelFormat,
  84.                 TAG_DONE);
  85.  
  86.                 LT_New(Handle,
  87.                     LA_Type,            SliderType,
  88.                     LA_LabelID,            MSG_SPEECHPANEL_VOLUME_GAD,
  89.                     LA_BYTE,            &PrivateConfig.Volume,
  90.                     LA_ID,                GAD_VOLUME,
  91.                     GTSL_Min,            MINVOL,
  92.                     GTSL_Max,            MAXVOL,
  93.                     GTSL_LevelFormat,    "%ld%%",
  94.                     GTSL_DispFunc,        VolumeDisplay,
  95.                 TAG_DONE);
  96.  
  97.                 LT_New(Handle,
  98.                     LA_Type,            MX_KIND,
  99.                     LA_LabelID,            MSG_SPEECHPANEL_SEX_GAD,
  100.                     LA_BYTE,            &PrivateConfig.Sex,
  101.                     LA_ID,                GAD_SEX,
  102.                     LAMX_FirstLabel,    MSG_SPEECHPANEL_MALE_TXT,
  103.                     LAMX_LastLabel,        MSG_SPEECHPANEL_FEMALE_TXT,
  104.                 TAG_DONE);
  105.  
  106.                 LT_New(Handle,
  107.                     LA_Type,            CHECKBOX_KIND,
  108.                     LA_LabelID,            MSG_SPEECHPANEL_SPEECH_ENABLED_GAD,
  109.                     LA_BYTE,            &PrivateConfig.Enabled,
  110.                     LA_ID,                GAD_ENABLED,
  111.                     LA_ExtraSpace,        TRUE,
  112.                 TAG_DONE);
  113.  
  114.                 LT_New(Handle,
  115.                     LA_Type,            XBAR_KIND,
  116.                 TAG_DONE);
  117.  
  118.                 LT_EndGroup(Handle);
  119.             }
  120.  
  121.             LT_New(Handle,
  122.                 LA_Type,    VERTICAL_KIND,
  123.             TAG_DONE);
  124.             {
  125.                 LT_New(Handle,
  126.                     LA_Type,            BUTTON_KIND,
  127.                     LA_LabelID,            MSG_SPEECHPANEL_SPEAK_GAD,
  128.                     LA_ID,                GAD_SPEAK,
  129.                     LABT_ExtraFat,        TRUE,
  130.                     GA_Disabled,        !PrivateConfig.Enabled,
  131.                 TAG_DONE);
  132.  
  133.                 LT_EndGroup(Handle);
  134.             }
  135.  
  136.             LT_New(Handle,
  137.                 LA_Type,VERTICAL_KIND,
  138.             TAG_DONE);
  139.             {
  140.                 LT_New(Handle,
  141.                     LA_Type,        XBAR_KIND,
  142.                     LAXB_FullSize,    TRUE,
  143.                 TAG_DONE);
  144.  
  145.                 LT_EndGroup(Handle);
  146.             }
  147.  
  148.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  149.                 LAGR_SameSize,    TRUE,
  150.                 LAGR_Spread,    TRUE,
  151.             TAG_DONE);
  152.             {
  153.                 LT_New(Handle,
  154.                     LA_Type,        BUTTON_KIND,
  155.                     LA_LabelID,        MSG_GLOBAL_USE_GAD,
  156.                     LA_ID,            GAD_USE,
  157.                     LABT_ReturnKey,    TRUE,
  158.                     LABT_ExtraFat,    TRUE,
  159.                 TAG_DONE);
  160.  
  161.                 LT_New(Handle,
  162.                     LA_Type,        BUTTON_KIND,
  163.                     LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  164.                     LA_ID,            GAD_LOAD,
  165.                 TAG_DONE);
  166.  
  167.                 LT_New(Handle,
  168.                     LA_Type,        BUTTON_KIND,
  169.                     LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  170.                     LA_ID,            GAD_SAVE,
  171.                 TAG_DONE);
  172.  
  173.                 LT_New(Handle,
  174.                     LA_Type,        BUTTON_KIND,
  175.                     LA_LabelID,        MSG_DISCARD_GAD,
  176.                     LA_ID,            GAD_DISCARD,
  177.                 TAG_DONE);
  178.  
  179.                 LT_New(Handle,
  180.                     LA_Type,        BUTTON_KIND,
  181.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  182.                     LA_ID,            GAD_CANCEL,
  183.                     LABT_EscKey,    TRUE,
  184.                 TAG_DONE);
  185.  
  186.                 LT_EndGroup(Handle);
  187.             }
  188.  
  189.             LT_EndGroup(Handle);
  190.         }
  191.  
  192.         if(PanelWindow = LT_Build(Handle,
  193.             LAWN_TitleID,        MSG_SPEECHPANEL_SPEECH_PREFERENCES_TXT,
  194.             LAWN_HelpHook,        &GuideHook,
  195.             LAWN_Parent,        Window,
  196.             WA_DepthGadget,        TRUE,
  197.             WA_DragBar,            TRUE,
  198.             WA_RMBTrap,            TRUE,
  199.             WA_Activate,        TRUE,
  200.             WA_SimpleRefresh,    TRUE,
  201.         TAG_DONE))
  202.         {
  203.             UBYTE DummyBuffer[MAX_FILENAME_LENGTH],*DummyChar;
  204.             struct FileRequester *FileRequest;
  205.             struct IntuiMessage *Message;
  206.             struct Gadget *MsgGadget;
  207.             BOOL OldEnglish;
  208.             ULONG MsgClass;
  209.             UWORD MsgCode;
  210.             BOOL Done;
  211.  
  212.             OldEnglish = English;
  213.  
  214.             GuideContext(CONTEXT_SPEECH);
  215.  
  216.             PushWindow(PanelWindow);
  217.  
  218.             Done = FALSE;
  219.  
  220.             do
  221.             {
  222.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  223.                 {
  224.                     Changed = FALSE;
  225.  
  226.                     break;
  227.                 }
  228.  
  229.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  230.                 {
  231.                     MsgClass    = Message->Class;
  232.                     MsgCode        = Message->Code;
  233.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  234.  
  235.                     LT_ReplyIMsg(Message);
  236.  
  237.                     if(MsgClass == IDCMP_GADGETUP)
  238.                     {
  239.                         switch(MsgGadget->GadgetID)
  240.                         {
  241.                             case GAD_ENABLED:
  242.  
  243.                                 LT_SetAttributes(Handle,GAD_SPEAK,
  244.                                     GA_Disabled,!MsgCode,
  245.                                 TAG_DONE);
  246.  
  247.                                 break;
  248.  
  249.                             case GAD_USE:
  250.  
  251.                                 Changed = Done = TRUE;
  252.  
  253.                                 if(ChangePtr)
  254.                                     *ChangePtr = TRUE;
  255.  
  256.                                 CopyMem(&PrivateConfig,SpeechConfig,sizeof(struct SpeechConfig));
  257.  
  258.                                 break;
  259.  
  260.                             case GAD_DISCARD:
  261.  
  262.                                 LastSpeech[0] = 0;
  263.  
  264.                                 if(ChangePtr)
  265.                                     *ChangePtr = FALSE;
  266.  
  267.                                 strcpy(Config->SpeechFileName,LastSpeech);
  268.  
  269.                                 Done = Changed = TRUE;
  270.                                 break;
  271.  
  272.                             case GAD_CANCEL:
  273.  
  274.                                 Done = TRUE;
  275.                                 Changed = FALSE;
  276.                                 break;
  277.  
  278.                             case GAD_LOAD:
  279.  
  280.                                 SplitFileName(LastSpeech,&DummyChar,DummyBuffer);
  281.  
  282.                                 LT_LockWindow(PanelWindow);
  283.  
  284.                                 strcpy(DummyBuffer,LastSpeech);
  285.  
  286.                                 if(FileRequest = OpenSingleFile(PanelWindow,LocaleString(MSG_SPEECHPANEL_LOAD_SPEECH_SETTINGS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  287.                                 {
  288.                                     FreeAslRequest(FileRequest);
  289.  
  290.                                     if(!ReadIFFData(DummyBuffer,&PrivateConfig,sizeof(struct SpeechConfig),ID_SPEK))
  291.                                         ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  292.                                     else
  293.                                     {
  294.                                         strcpy(LastSpeech,DummyBuffer);
  295.  
  296.                                         strcpy(Config->SpeechFileName,LastSpeech);
  297.  
  298.                                         LT_SetAttributes(Handle,GAD_RATE,
  299.                                             GTSL_Level,        PrivateConfig.Rate,
  300.                                         TAG_DONE);
  301.  
  302.                                         LT_SetAttributes(Handle,GAD_PITCH,
  303.                                             GTSL_Level,        PrivateConfig.Pitch,
  304.                                         TAG_DONE);
  305.  
  306.                                         LT_SetAttributes(Handle,GAD_FREQUENCY,
  307.                                             GTSL_Level,        PrivateConfig.Frequency,
  308.                                         TAG_DONE);
  309.  
  310.                                         LT_SetAttributes(Handle,GAD_VOLUME,
  311.                                             GTSL_Level,        PrivateConfig.Volume,
  312.                                         TAG_DONE);
  313.  
  314.                                         LT_SetAttributes(Handle,GAD_SEX,
  315.                                             GTCY_Active,    PrivateConfig.Sex,
  316.                                         TAG_DONE);
  317.  
  318.                                         LT_SetAttributes(Handle,GAD_ENABLED,
  319.                                             GTCB_Checked,    PrivateConfig.Enabled,
  320.                                         TAG_DONE);
  321.  
  322.                                         LT_SetAttributes(Handle,GAD_SPEAK,
  323.                                             GA_Disabled,    PrivateConfig.Enabled == FALSE,
  324.                                         TAG_DONE);
  325.  
  326.                                         Changed = TRUE;
  327.  
  328.                                         if(ChangePtr)
  329.                                             *ChangePtr = FALSE;
  330.                                     }
  331.                                 }
  332.  
  333.                                 LT_UnlockWindow(PanelWindow);
  334.  
  335.                                 break;
  336.  
  337.                             case GAD_SAVE:
  338.  
  339.                                 LT_LockWindow(PanelWindow);
  340.  
  341.                                 strcpy(DummyBuffer,LastSpeech);
  342.  
  343.                                 if(FileRequest = SaveFile(PanelWindow,LocaleString(MSG_SPEECHPANEL_SAVE_SPEECH_SETTINGS_TXT),NULL,"#?.prefs",DummyBuffer,sizeof(DummyBuffer)))
  344.                                 {
  345.                                     FreeAslRequest(FileRequest);
  346.  
  347.                                     if(!WriteIFFData(DummyBuffer,&PrivateConfig,sizeof(struct SpeechConfig),ID_SPEK))
  348.                                         ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  349.                                     else
  350.                                     {
  351.                                         strcpy(LastSpeech,DummyBuffer);
  352.  
  353.                                         strcpy(Config->SpeechFileName,LastSpeech);
  354.  
  355.                                         if(ChangePtr)
  356.                                             *ChangePtr = FALSE;
  357.                                     }
  358.                                 }
  359.  
  360.                                 LT_UnlockWindow(PanelWindow);
  361.  
  362.                                 break;
  363.  
  364.                             case GAD_SPEAK:
  365.  
  366.                                 SwapMem(SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  367.  
  368.                                 SpeechSetup();
  369.  
  370.                                 English = TRUE;
  371.  
  372.                                 Say(LocaleString(MSG_SPEECHPANEL_THIS_IS_TERM_SPEAKING_TXT));
  373.  
  374.                                 SwapMem(SpeechConfig,&PrivateConfig,sizeof(struct SpeechConfig));
  375.  
  376.                                 English = OldEnglish;
  377.  
  378.                                 break;
  379.                         }
  380.                     }
  381.                 }
  382.             }
  383.             while(!Done);
  384.  
  385.             PopWindow();
  386.         }
  387.  
  388.         LT_DeleteHandle(Handle);
  389.     }
  390.  
  391.     SpeechSetup();
  392.  
  393.     return(Changed);
  394. }
  395.